【LeetCode 74】Search a 2D Matrix 搜索二维矩阵

【LeetCode 74】Search a 2D Matrix 搜索二维矩阵

问题描述:

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

说明:解集不能包含重复的子集。

示例1:

输入:
matrix = [
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]
target = 3
输出: true

Solution:

Solution: 二维矩阵从左到右、从上到下均为升序,可以用两次二分查找,先定位到元素所在行,再在本行查找元素即可。

Code:

class solution {
    public static  boolean searchMatrix (int[][] matrix, int target) {
        int n = matrix.length;
        if(n==0)
            return false;
        int m = matrix[0].length;
        if(m==0)
            return false;
        int i = 0, j = n - 1, midColumn = 0;
        while (i <= j) {
            midColumn = (i + j) / 2;
            if (matrix[midColumn][0] <= target && target <= matrix[midColumn][m - 1])
                break;
            if(target<matrix[midColumn][0])
                j=midColumn-1;
            else
                i=midColumn+1;
        }
        if (i > j)
            return false;
        int p = 0, q = m - 1, midRow = 0;
        while (p <= q) {
            midRow = (p + q) / 2;
            if (matrix[midColumn][midRow] == target)
                return true;
            else if(matrix[midColumn][midRow]<target)
                p=midRow+1;
            else
                q=midRow-1;
        }
        return false;
    }
}  
Thanks!